package functions

import "math"

// сигмоида
func Sigmoid(x float64) float64 {
	return 1.0 / (1.0 + math.Exp(-x))
}

// производная сигмоиды
func SigmoidDerivative(x float64) float64 {
	sx := Sigmoid(x)
	return sx * (1.0 - sx)
}

// линейная функция
func Linear(x float64) float64 {
	return x
}

// производная линейной функции
func LinearDerivative(x float64) float64 {
	return 1.0
}

func ReLU(x float64) float64 {
	if x < 0 {
		return 0
	}
	return x
}

func ReLuDerivative(x float64) float64 {
	if x < 0 {
		return 0
	}
	return 1
}

func Tanh(x float64) float64 {
	return math.Tanh(x)
}

func TanhDerivative(x float64) float64 {
	return 1.0 - math.Pow(Tanh(x), 2)
}
